package com.sgc.view;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.primefaces.context.RequestContext;

import com.architecture.view.MensagemEnum;
import com.architecture.view.PadraoManutencaoMB;
import com.architecture.view.UtilWeb;
import com.archtecture.control.enums.TipoOrdenacao;
import com.archtecture.control.exceptions.NegocioException;
import com.sgv.model.entities.CompraModel;
import com.sgv.model.entities.ItemCompraModel;
import com.sgv.model.entities.ProdutoModel;
import com.sgv.model.persistence.SGVCaixaFacadeLocal;

@ManagedBean(name = "itemCompraMB")
@ViewScoped
public class ItemCompraMB extends PadraoManutencaoMB<ItemCompraModel> {

	private CompraModel mestreModel;

	private List<ProdutoModel> listProduto;

	@EJB
	private SGVCaixaFacadeLocal caixaFacade;

	@Override
	protected ItemCompraModel getInstance() {
		ItemCompraModel lModel = new ItemCompraModel();
		lModel.setCompra(new CompraModel());
		lModel.setProduto(new ProdutoModel());
		return lModel;
	}

	@SuppressWarnings("unchecked")
	public List<ProdutoModel> getListProduto() {
		if (listProduto == null) {
			listProduto = montarCombo(new ProdutoModel(), TipoOrdenacao.ASC, "nome");
		}
		return listProduto;
	}

	@PostConstruct
	public void iniciarComponentes() {

		try {

			String lParam = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getParameter("ID");

			CompraModel lCompra = new CompraModel();
			lCompra.setCodigo(Long.valueOf(lParam));
			lCompra = getPersistenceFacade().carregar(lCompra);

			getModelSel().setCompra(lCompra);
			setMestreModel(lCompra);

			executarPesquisar();
			
			for (ItemCompraModel lItemCompra : getListModel()) {
				getListProduto().remove(lItemCompra.getProduto());
			}

		}

		catch (NegocioException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void executarSalvar() {

		try {

			getModelCad().setCompra(getMestreModel());

			getCaixaFacade().inserirItemCompra(getModelCad());
			UtilWeb.enviarMensagem(MensagemEnum.INFO_SUCESSO_CADASTRO);

			getListProduto().remove(getModelCad().getProduto());

			setListModel(null);
			setModelCad(null);

			executarPesquisar();

			RequestContext.getCurrentInstance().execute("PF('dialogCadastro').hide()");
		}
		catch (NegocioException e) {
			UtilWeb.tratarException(e);
		}
	}

	@Override
	public void executarExcluir(ItemCompraModel pModel) {

		try {

			getListProduto().add(pModel.getProduto());

			// TODO Fazer o sort
			
			getCaixaFacade().excluirItemCompra(pModel);
			UtilWeb.enviarMensagem(MensagemEnum.INFO_SUCESSO_EXCLUSAO);
			
			setListModel(null);
			setModelCad(null);

			executarPesquisar();
		}
		catch (Exception e) {
			UtilWeb.tratarException(e);
		}
	}

	public CompraModel getMestreModel() {
		if (mestreModel == null) {
			mestreModel = new CompraModel();
		}
		return mestreModel;
	}

	public SGVCaixaFacadeLocal getCaixaFacade() {
		return caixaFacade;
	}

	public void setMestreModel(CompraModel mestreModel) {
		this.mestreModel = mestreModel;
	}
}
